The conventional approach to complex hardware programming is called a procedural approach and based on a set of procedures or functions, where each function is responsible for programming a particular functional block of a hardware unit. FIG. 1 shows a simplified block diagram of a conventional approach in the art. The system includes software such as operating system 101, firmware 102, and hardware 103. The applications 104 and the device drivers are running in the software layer 101. The basic input/output system (BIOS) 106 is running in the firmware 102, embedded in a memory of the device 107. The device drivers 105 (e.g., display driver) communicate with the BIOS 106 to program the hardware device 107. The BIOS typically includes a set of procedures or functions to program a particular functional block of the hardware device 107.
This approach seems like a good and straightforward solution, but it has a few major drawbacks. Complicated hardware complicates the controlling software's logic (e.g., BIOS 106), which makes it hard to maintain, modify, and add new features.
In addition, procedural approach limits or in some cases eliminates portability of the final software module between different operating systems such as Windows and Linux, and different levels of software, such as firmware, device drivers, and applications. As a result, if a user desires to develop a set of software consisting of modules of different types, such as BIOS, device drivers, and applications, for a hardware unit, and the modules would need to control same parts of the hardware, there would be duplications of functionality implemented differently for software of different types. Further, if a hardware-related system function needs a change (e.g., as the result of a hardware modification), all related modules would need to be updated one by one, which increases a chance for a coding error and synchronization issues.
Furthermore, in order to modify the controlling software one needs to be an expert not only in the hardware but also in the language the software has been written with. In addition, one needs to be very familiar with the architecture of the controlling software, which makes the number of people capable of making the change very small. Therefore, a better solution is desirable.